﻿#pragma once
#include "afxdialogex.h"


// CTabControl 对话框


typedef struct {
	uint16_t Size;									// 实际的结构长度包括自己的2字节
	// 2字节数据
	uint8_t Volume;											// 主音量选择
	uint8_t InSrc;											// 输入音源选择

	// 4字节数据
	uint8_t ListenMode;		        						// 聆听模式
	uint8_t EqSelect;		        						// EQ模式
	uint16_t PlayTime;										// 正在播放的时间，16位寄存器

	// 8字节数据
	uint8_t SrcFormat;										// 数码信号输入格式指示 KCM_SRC_FORMAT = 0x18
	uint8_t SrcChannel; 									// 数码信号输入通道信息及超低音指示	KCM_SRC_CHANNEL = 0x19,
	uint8_t SrcRate; 										// 数码信号输入采样率及实际播放采样率指示 KCM_SRC_RATE = 0x1a,
	uint8_t SrcBps; 										// 数码信号输入码流率指示 KCM_SRC_BPS = 0x1b,
	uint8_t TestTone;										// 噪音测试通道
	uint8_t RTemp;
	uint16_t PlayGetIdx;										// 控制多媒体文件播放编号，16位寄存器

	// 16字节数据
	uint8_t LipSyncSet; 		        					// 齿音同步延迟时间 RAC_LIP_SYNC_SET = 0x06,
	uint8_t SpkConfig;										// 喇叭设置 RAC_SPK_CONFIG   = 0x07,
	uint8_t LpfFreq;										// 超低音通道LPF低通滤波器频率RAC_LPF_FREQ   = 0x08,
	uint8_t HpfFreq;										// 主声道小喇叭HPF高通滤波器频率 RAC_HPF_FREQ   = 0x09,
	uint8_t MicDelay;										// 话筒延迟时间，每步20毫秒
	uint8_t MicVolume;										// 话筒1及话筒2音量比例
	uint8_t MicEchoEq;										// 话筒回声比例及话筒多段EQ均衡音效处理选择
	uint8_t MicRepeat;										// 话筒重复及直达声比例
	uint8_t MicReverb;										// 话筒混响1及混响2比例
	uint8_t MicWhistle;										// 话筒啸叫声音反馈模式
	uint16_t FileTime;										// 读取多媒体文件正在播放的总时间，共2字节单位秒
	uint32_t R32A;

	// 32字节数据		
	uint8_t Trim[8];										// 前置 中置 超低音 环绕左后置 各声道微调 共占用8字节 RAC_CHANNEL_TRIM = 0x50,
	uint32_t ErrorFlag;										// 获取模块错误及解码标志，32位寄存器
	uint16_t SrcValid;										// 有效的音源输入改变，16位寄存器
	uint16_t WorkStatus;									// 模块工作/运行状态指示
	uint16_t SdQty;											// 读取多媒体文件正在播放的时间，共2字节单位秒
	uint16_t UdiskQty;										// 读取多媒体文件正在播放的时间，共2字节单位秒

	// 64字节数据
	uint8_t Eq1[16];			        					// 共占用16字节 RAC_EQ0 = 0x80,	
	uint8_t Eq2[16];				        				// 共占用16字节 RAC_EQ1 = 0x90,
	uint8_t Eq3[16];		        						// 共占用16字节 RAC_EQ2 = 0xa0,		
	uint8_t Eq4[16];				        				// 共占用16字节 RAC_EQ3 = 0xb0,

	// 128字节数据
	uint8_t EqMic[16];				        				// 共占用16字节 RAC_EQ_MIC = 0xc0
	uint8_t SetDelayTime[8];								// KCM_DELAY_TIME设置所有声道的延迟时间 共占用8字节
	uint8_t Rev1[90];
	uint8_t Rev2[0x0c];
	uint8_t MaxDelayTime[8];								// KCM_MAX_DELAY读取所有声道最大可用的延迟时 共占用8字节
	uint8_t MaxMasterVol;		       						// 控制电器的音量 RAC_MAX_MASTER_VOLUME = 0xe1,
	uint8_t MaxMicDelay;									// 话筒延迟时间，每步20毫秒	RAC_MAX_MIC_DELAY = 0xe3,
	uint8_t MaxMicVolume;									// 话筒1及话筒2音量比例 RAC_MAX_MIC_VOLUME = 0xe4,
	uint8_t MaxMicRepeat;									// 话筒重复及直达声比例 RAC_MAX_MIC_REPEAT = 0xe6,
	uint8_t MaxMicReverb;									// 话筒混响1及混响2比例 RAC_MAX_MIC_REVERB = 0xe7,
	uint8_t MaxMicWhistle;									// 话筒啸叫声音反馈模式 RAC_MAX_MIC_WHISTLE = 0xe8,
} REGISTER_DIFF;											// 继承 DIFF_TEMPLATE 相异传输 模板 实际的结构长度 结构数据


class CTabControl : public CDialogEx
{
	DECLARE_DYNAMIC(CTabControl)

public:
	CTabControl(CWnd* pParent = nullptr);   // 标准构造函数
	virtual ~CTabControl();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_TAB_CONTROL };
#endif

	void ShowAccount(bool init);
	void ShowRegister();
	void ShowSlider(uint8_t value);
	int GetEditValue(int nID, bool isHex);					// 获取CEdit输入的16进制或10进制数值
	void SetEditHexValue(int nID, int value, bool three);	// 写入HEX数值到CEdit

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

	DECLARE_MESSAGE_MAP()
public:
	virtual BOOL OnInitDialog();
	afx_msg void OnTimer(UINT_PTR nIDEvent);
	afx_msg void OnNMCustomdrawSlider1(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnBnClickedButtonRandom();
	afx_msg void OnBnClickedButtonLogin();
	afx_msg void OnBnClickedButtonChange();
	afx_msg void OnEnChangeEditReg();
};
